//
// Created by 李孝威 on 2021/4/8.
//

#ifndef OBSERVER_OBSERVERABLE_H
#define OBSERVER_OBSERVERABLE_H
#include <iostream>
#include <list>
#include <string>
using namespace std;

#include "Observer.h"

class Observerable {
public:
    Observerable();
    virtual ~Observerable();

    // 注册观察者
    void Attach(Observer* pOb);
    // 反注册观察者
    void Detach(Observer* pOb);
    // 反注册所有观察者
    void DetachAll();
    // 获取观察者数量
    int GetObserverCount() const;
    // 获取信息
    virtual void GetSomeNews(string str);
protected:
    void SetChange(string news);

private:
    void Notify(void *pArg);

private:
    list<Observer*> _Obs;
    bool _bChange{};
};


#endif //OBSERVER_OBSERVERABLE_H
